Skip to main content

EVPN Part 5: Cấu Hình, Kiểm Tra & Xử Lý Sự Cố

Loạt EVPN (7 phần): 1. Vì sao cần EVPN & Fabric · 2. MAC VRF & IP VRF · 3. Route Types & MAC/IP · 4. Inter-VNI & Multi-Homing · 5. Cấu hình & Troubleshooting · 6. Routing Table nội bộ · 7. Multi-Site RT & Route Leak (sắp đăng)

Phần 5/7 trong loạt EVPN: đọc sau Phần 4: Routing Giữa Các VNI & Multi-Homing. Đây là phần đầu tiên có cấu hình thật, viết song song trên 4 nền tảng (Juniper Junos dạng set, Cisco NX-OS, Arista EOS, Huawei VRP CloudEngine), chỉ nên đọc sau khi đã nắm chắc khái niệm ở 3 phần trước. Ví dụ dùng tên thiết bị/địa chỉ IP hoàn toàn hư cấu, phục vụ mục đích minh họa. Cú pháp CLI trong phần này đã được đối chiếu với tài liệu chính thức của từng vendor tại thời điểm viết, xem Nguồn tham khảo ở cuối bài.

Bốn phần trước đã xây xong toàn bộ nền tảng khái niệm: vì sao cần EVPN, underlay/overlay là gì, RD/RT hoạt động ra sao, Symmetric IRB đi qua từng bước thế nào. Giờ là lúc ghép tất cả lại thành cấu hình thật. Vì mỗi vendor gọi cùng một khái niệm bằng một cái tên khác nhau, phần này trình bày song song 4 nền tảng phổ biến nhất trong data center: Juniper Junos, Cisco NX-OS, Arista EOS, Huawei VRP. Nguyên tắc khi đọc phần này: mỗi khối cấu hình dưới đây không phải để học thuộc, mà để nhận ra "à, dòng này chính là thứ Phần 1-4 đã giải thích", chỉ khác là giờ nó có cú pháp cụ thể theo từng vendor. Nếu chỉ dùng một vendor, cứ đọc kỹ block của vendor đó và lướt qua các block còn lại để thấy cùng một khái niệm được diễn đạt khác nhau ra sao.

Ba câu hỏi cốt lõi mà phần này trả lời:

  1. Một cấu hình EVPN hoàn chỉnh tách thành những lớp nào, và mỗi lớp viết ra thành lệnh gì trên Junos, NX-OS, EOS, VRP (Mục 1)?
  2. Sau khi commit xong, gõ lệnh gì để biết từng mảnh đã chạy đúng: BGP session, Type 2, Type 3, ARP suppression, VXLAN tunnel, ESI (Mục 2)?
  3. Khi một fabric không chạy, kiểm tra theo thứ tự nào để khoanh vùng nhanh nhất, và vì sao Route Target gần như luôn là chỗ đáng nghi trước tiên (Mục 3)?

Mục lục​


1. Cấu hình đa vendor — từng bước​

Tổng quan: 3 lớp cấu hình độc lập​

Đúng như đã học ở Phần 1, Mục 3, một cấu hình EVPN hoàn chỉnh luôn tách thành ba lớp độc lập, và tách bạch được ba lớp này trong đầu là chìa khóa để không bị rối khi nhìn vào một file cấu hình dài hàng trăm dòng. Ba lớp này là khái niệm kiến trúc thuần túy của EVPN-VXLAN, không phụ thuộc vendor: Cisco, Arista, Huawei đều tách y hệt, chỉ khác tên lệnh.

3 Configuration Layers1. Underlay: OSPF or BGPSingle goal: every Loopback0 reaches every other2. Overlay: MP-BGP EVPN (iBGP to the Route Reflector)family evpn signaling: carries MAC/IP routes between leaves3. EVPN + VXLAN — switch-options, vlans, protocols evpnVNI-to-VLAN mapping, RD/RT, VTEP source, anycast gatewayThe busiest layer: this is where RD and RT actually live

Bảng thuật ngữ tương đương giữa 4 vendor​

Trước khi vào từng bước, tra nhanh bảng này mỗi khi thấy một lệnh lạ, vì phần lớn "cú pháp khác nhau" thực ra chỉ là tên khác nhau cho cùng một khái niệm đã học ở Phần 1-4.

Khái niệmJunosCisco NX-OSArista EOSHuawei VRP
VTEP source interfacevtep-source-interfaceinterface nve1 → source-interfaceinterface Vxlan1 → vxlan source-interfaceinterface nve1 → source
L2 VNI ↔ VLANvlans { … vxlan vni … }vlan X + vn-segment Yvxlan vlan X vni Ybridge-domain X + vxlan vni Y
L3 VNI ↔ VRFrouting-instances (vrf) + ip-prefix-routesvrf context + vnivrf instance + vxlan vrf … vniip vpn-instance + vxlan vni
RD / RTroute-distinguisher / vrf-targetrd / route-targetrd / route-targetroute-distinguisher / vpn-target
Anycast Gatewayirb + mac (anycast MAC)fabric forwarding mode anycast-gateway + anycast-gateway-macip address virtual + ip virtual-router mac-addressvbdif + vxlan anycast-gateway enable
BUM replication (ingress)ingress-node-replicationingress-replication protocol bgptự học qua BGP EVPN (không cần lệnh riêng)head-end peer-list protocol bgp

Bước 1: Underlay (dùng eBGP giữa Leaf và Spine)​

Junos (set style):

set routing-options router-id 10.0.0.1
set routing-options autonomous-system 65001 # mỗi Leaf dùng ASN riêng (eBGP underlay)

set protocols bgp group UNDERLAY type external
set protocols bgp group UNDERLAY family inet unicast
set protocols bgp group UNDERLAY export LOOPBACK # chỉ quảng bá loopback
set protocols bgp group UNDERLAY neighbor 192.168.1.0 peer-as 65000 # Spine-01
set protocols bgp group UNDERLAY neighbor 192.168.1.2 peer-as 65000 # Spine-02

set policy-options policy-statement LOOPBACK from protocol direct
set policy-options policy-statement LOOPBACK from route-filter 10.0.0.1/32 exact
set policy-options policy-statement LOOPBACK then accept

Cisco NX-OS:

feature bgp

router bgp 65001
router-id 10.0.0.1
address-family ipv4 unicast
network 10.0.0.1/32 ! quảng bá loopback vào underlay
neighbor 192.168.1.0 remote-as 65000 ! Spine-01
address-family ipv4 unicast
neighbor 192.168.1.2 remote-as 65000 ! Spine-02
address-family ipv4 unicast

Arista EOS:

router bgp 65001
router-id 10.0.0.1
neighbor 192.168.1.0 remote-as 65000 ! Spine-01
neighbor 192.168.1.2 remote-as 65000 ! Spine-02
network 10.0.0.1/32 ! quảng bá loopback vào underlay

Huawei VRP:

bgp 65001
router-id 10.0.0.1
peer 192.168.1.0 as-number 65000 # Spine-01
peer 192.168.1.2 as-number 65000 # Spine-02
network 10.0.0.1 255.255.255.255
ipv4-family unicast
peer 192.168.1.0 enable
peer 192.168.1.2 enable

Đây chỉ là một cấu hình BGP thuần túy để quảng bá loopback, không có gì liên quan tới EVPN ở bước này. Với ai từng cấu hình eBGP giữa hai AS, đoạn này không có gì lạ dù ở vendor nào: mỗi Leaf một ASN riêng, peer với Spine, quảng bá đúng một prefix /32.

Bước 2: Overlay BGP EVPN (iBGP giữa Leaf và Spine RR)​

Junos (set style):

# Leaf-01 — Overlay iBGP EVPN
set routing-options autonomous-system 65000 # tất cả Leaf/Spine dùng chung ASN (iBGP)

set protocols bgp group OVERLAY-EVPN type internal
set protocols bgp group OVERLAY-EVPN family evpn signaling # bật EVPN address-family
set protocols bgp group OVERLAY-EVPN local-address 10.0.0.1 # dùng loopback
set protocols bgp group OVERLAY-EVPN neighbor 10.100.0.1 # Spine-01 (Route Reflector)
set protocols bgp group OVERLAY-EVPN neighbor 10.100.0.2 # Spine-02 (Route Reflector)

# Spine-01 — cấu hình Route Reflector
set protocols bgp group OVERLAY-EVPN type internal
set protocols bgp group OVERLAY-EVPN family evpn signaling
set protocols bgp group OVERLAY-EVPN cluster 0.0.0.1 # bật Route Reflector
set protocols bgp group OVERLAY-EVPN local-address 10.100.0.1
set protocols bgp group OVERLAY-EVPN neighbor 10.0.0.1 # Leaf-01
set protocols bgp group OVERLAY-EVPN neighbor 10.0.0.2 # Leaf-02
set protocols bgp group OVERLAY-EVPN neighbor 10.0.0.3 # Leaf-03 ... tất cả Leaf

Cisco NX-OS:

! Leaf-01
router bgp 65000
neighbor 10.100.0.1 remote-as 65000 ! Spine-01 (RR)
update-source loopback0
address-family l2vpn evpn
send-community extended
neighbor 10.100.0.2 remote-as 65000 ! Spine-02 (RR)
update-source loopback0
address-family l2vpn evpn
send-community extended

! Spine-01 — Route Reflector
router bgp 65000
neighbor 10.0.0.1 remote-as 65000 ! Leaf-01
update-source loopback0
address-family l2vpn evpn
send-community extended
route-reflector-client
neighbor 10.0.0.2 remote-as 65000 ! Leaf-02
update-source loopback0
address-family l2vpn evpn
send-community extended
route-reflector-client

Arista EOS:

! Leaf-01
router bgp 65000
neighbor 10.100.0.1 remote-as 65000 ! Spine-01 (RR)
neighbor 10.100.0.1 update-source Loopback0
neighbor 10.100.0.2 remote-as 65000 ! Spine-02 (RR)
neighbor 10.100.0.2 update-source Loopback0
address-family evpn
neighbor 10.100.0.1 activate
neighbor 10.100.0.2 activate

! Spine-01 — Route Reflector
router bgp 65000
neighbor 10.0.0.1 remote-as 65000 ! Leaf-01
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.2 remote-as 65000 ! Leaf-02
neighbor 10.0.0.2 update-source Loopback0
address-family evpn
neighbor 10.0.0.1 activate
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.2 activate
neighbor 10.0.0.2 route-reflector-client

Huawei VRP:

# Leaf-01
bgp 65000
peer 10.100.0.1 as-number 65000 # Spine-01 (RR)
peer 10.100.0.1 connect-interface LoopBack0
peer 10.100.0.2 as-number 65000 # Spine-02 (RR)
peer 10.100.0.2 connect-interface LoopBack0
l2vpn-family evpn
peer 10.100.0.1 enable
peer 10.100.0.2 enable

# Spine-01 — Route Reflector
bgp 65000
peer 10.0.0.1 as-number 65000 # Leaf-01
peer 10.0.0.1 connect-interface LoopBack0
peer 10.0.0.2 as-number 65000 # Leaf-02
peer 10.0.0.2 connect-interface LoopBack0
l2vpn-family evpn
peer 10.0.0.1 enable
peer 10.0.0.1 reflect-client
peer 10.0.0.2 enable
peer 10.0.0.2 reflect-client

Dòng đáng chú ý nhất ở khối Junos là family evpn signaling, chính xác là cách khai báo "tôi muốn dùng address-family evpn" mà Phần 1 đã nói: BGP gốc chỉ hiểu IPv4, nên cần khai báo rõ một address-family riêng để mang theo MAC/VNI. Ba vendor còn lại làm đúng việc này bằng ba cái tên khác nhau: address-family l2vpn evpn (Cisco), address-family evpn (Arista), l2vpn-family evpn (Huawei), bản chất vẫn là một. cluster/route-reflector-client/reflect-client trên Spine chính là cấu hình bật vai trò Route Reflector đã học ở Phần 3.

Bước 3: Hiểu RD và RT trước khi cấu hình​

Phần 1, Mục 4 đã giải thích RD/RT bằng lời, phần này chỉ là cách viết chúng ra thành cấu hình thật.

Route Distinguisher (RD) chỉ làm đúng một việc: khiến route trở nên độc nhất trong bảng BGP chung. Nó không quyết định route đi đâu. Vì sao cần tới nó thì thấy rõ nhất ở trường hợp Anycast Gateway: mọi Leaf đều dùng chung một MAC gateway, nên nếu không có gì phân biệt, hai Leaf sẽ quảng bá ra hai route trông giống hệt nhau và BGP không còn cách nào tách chúng ra:

Không có RDCó RD
Leaf-01 quảng báMAC=AA, IP=10.1.1.1010.0.0.1:1 + MAC=AA
Leaf-02 quảng báMAC=AA, IP=10.1.1.1010.0.0.2:1 + MAC=AA
BGP nhìn thấyHai route trùng khít nhau, xung độtHai route riêng biệt, cùng tồn tại

Route Target (RT) mới là thứ quyết định route được import vào forwarding-space nào, viết theo định dạng target:<ASN>:<local-value>. Bên export gắn RT lên route trước khi gửi đi; bên import so RT nhận được với danh sách RT mà nó chấp nhận. Hai giá trị phải khớp chính xác, không có cơ chế khớp gần đúng hay khớp một phần nào:

Leaf-01 exportLeaf-02 importKết quả
target:65000:1target:65000:1Route được nhận, vào đúng forwarding-space
target:65000:1target:65000:2Route bị bỏ qua, không vào VRF nào

Trên Junos có hai cách viết RT ra thành cấu hình thật.

Cách 1: shorthand vrf-target. Đặt đúng một dòng, Junos tự suy ra cả hướng import lẫn hướng export đều dùng giá trị đó. Đây là cách dùng cho gần như mọi trường hợp thông thường, khi import RT bằng đúng export RT:

set switch-options vrf-target target:65000:1

Cách 2: policy tường minh. Cần tới nó khi một thiết bị phải import nhiều RT khác nhau cùng lúc, chẳng hạn thiết kế hub-and-spoke hoặc DCI nhiều site:

set policy-options community RT-A members target:65000:1
set policy-options community RT-B members target:65000:2
set policy-options policy-statement EVPN-IMPORT term 1 from community [ RT-A RT-B ]
set policy-options policy-statement EVPN-IMPORT term 1 then accept
set policy-options policy-statement EVPN-EXPORT term 1 then community add RT-A
set policy-options policy-statement EVPN-EXPORT term 1 then accept

EVPN-IMPORT chấp nhận cả RT-A lẫn RT-B, nên thiết bị nhận được route của hai nhóm khác nhau; EVPN-EXPORT thì chỉ gắn RT-A lên route do chính nó phát ra. Tách rời hai hướng như vậy là đúng thứ mà shorthand vrf-target không làm được.

RT xếp theo hai tầng. Junos cho phép đặt một RT mặc định ở switch-options áp cho mọi VNI (tầng 1), rồi override riêng cho từng VNI cần giá trị khác qua vni-options (tầng 2). Từ khóa auto ở tầng 1 sinh thêm một RT theo công thức ASN ghép VNI:

# Tầng 1 — RT mặc định cho mọi VNI chưa có override
set switch-options vrf-target target:65001.0:1
set switch-options vrf-target auto

# Tầng 2 — override RT cho từng VNI cụ thể
set protocols evpn vni-options vni 1000110
set protocols evpn vni-options vni 1000124 vrf-target target:65002.0:10124
set protocols evpn vni-options vni 1002010 vrf-target target:65001.0:12010

Kết quả: VNI 1000110 dùng global target:65001.0:1; VNI 1000124 và 1002010 dùng RT riêng đã override. Cơ chế này hữu ích trong thiết kế multi-tenant: mỗi tenant có ASN riêng nên RT riêng, đảm bảo VNI của tenant B không bị import nhầm bởi thiết bị của tenant A dù chung một EVPN fabric. Mô hình multi-site với nhiều RT theo từng site trong thực tế production sẽ được nói kỹ ở các phần sau.

Từ khóa auto khiến một VNI mang hai RT cùng lúc: một global explicit và một auto-derived theo công thức ASN+VNI. Một route mang nhiều RT là chuyện bình thường trong BGP (multiple extended communities); nhờ vậy, một thiết bị có thể import theo RT global (nhận toàn bộ VNI của tenant) trong khi thiết bị khác import theo RT auto-derived (chỉ nhận đúng một VNI cụ thể). Cùng một route, hai cách import khác nhau tùy nhu cầu từng thiết bị.

Cùng khái niệm này trên 3 vendor còn lại, chỉ khác tên lệnh, logic import/export giống hệt:

Cơ chếJunosCisco NX-OSArista EOSHuawei VRP
RT chung (import = export)vrf-target target:ASN:VALroute-target both ASN:VAL (hoặc both auto)route-target both ASN:VALvpn-target ASN:VAL
Import riêngvrf-import POLICY + community/policy-statementroute-target import ASN:VAL [evpn] — nhiều dòng = nhiều RTroute-target import ASN:VALvpn-target ASN:VAL import-extcommunity
Export riêngvrf-export POLICYroute-target export ASN:VAL [evpn]route-target export ASN:VALvpn-target ASN:VAL export-extcommunity

Hậu tố evpn trên Cisco/Huawei (route-target … evpn, vpn-target … evpn) chỉ cần thêm khi RD/VRF đó dùng chung cho cả VPNv4 lẫn L2VPN EVPN và muốn RT chỉ áp dụng riêng cho EVPN address-family. Trường hợp thường gặp nhất trong bài này (chỉ chạy EVPN) không bắt buộc phải có hậu tố này.

Bước 4: EVPN + VXLAN cấu hình đầy đủ trên Leaf​

Junos (set style):

# --- Interfaces ---
set interfaces lo0 unit 0 family inet address 10.0.0.1/32
set interfaces ge-0/0/0 unit 0 family ethernet-switching interface-mode access
set interfaces ge-0/0/0 unit 0 family ethernet-switching vlan members vlan-100
set interfaces irb unit 1000 family inet address 10.1.1.1/24
set interfaces irb unit 1000 mac 00:00:5e:00:01:01 # Anycast MAC — giống trên tất cả Leaf!

# --- VLANs + VNI mapping ---
set vlans vlan-100 vlan-id 100
set vlans vlan-100 vxlan vni 1000
set vlans vlan-100 vxlan ingress-node-replication # dùng EVPN ingress-replication (không cần multicast)
set vlans vlan-100 l3-interface irb.1000

# --- Switch options ---
set switch-options vtep-source-interface lo0.0 # loopback làm source IP của VXLAN tunnel
set switch-options route-distinguisher 10.0.0.1:1 # RD riêng của Leaf này — Leaf-02 sẽ dùng 10.0.0.2:1
set switch-options vrf-target target:65000:1 # RT — tất cả Leaf phải cùng value này

# --- EVPN protocol ---
set protocols evpn encapsulation vxlan
set protocols evpn extended-vni-list all # bật EVPN cho tất cả VNI
set protocols evpn default-gateway no-gateway-community # cho phép anycast GW

Cisco NX-OS:

feature bgp
feature interface-vlan
feature vn-segment-vlan-based
feature nv overlay
nv overlay evpn

fabric forwarding anycast-gateway-mac 0000.5e00.0101 ! Anycast MAC — giống trên tất cả Leaf!

interface loopback0
ip address 10.0.0.1/32

interface loopback1 ! VTEP source riêng biệt (best practice)
ip address 10.0.0.11/32

vlan 100
vn-segment 1000 ! VLAN 100 ↔ VNI 1000

interface Vlan100
no shutdown
ip address 10.1.1.1/24
fabric forwarding mode anycast-gateway ! bật anycast gateway cho SVI này

interface nve1
no shutdown
source-interface loopback1 ! loopback làm source IP của VXLAN tunnel
host-reachability protocol bgp
member vni 1000
suppress-arp ! ARP suppression per-VNI
ingress-replication protocol bgp ! không cần multicast underlay

evpn
vni 1000 l2
rd 10.0.0.1:1 ! RD riêng của Leaf này
route-target import 65000:1
route-target export 65000:1

Arista EOS:

ip virtual-router mac-address 00:00:5e:00:01:01 ! Anycast MAC — giống trên tất cả Leaf!

interface Loopback0
ip address 10.0.0.1/32

interface Loopback1 ! VTEP source riêng biệt
ip address 10.0.0.11/32

vlan 100

interface Vlan100
ip address virtual 10.1.1.1/24 ! anycast gateway — cùng IP+MAC trên mọi Leaf

interface Vxlan1
vxlan source-interface Loopback1 ! loopback làm source IP của VXLAN tunnel
vxlan udp-port 4789
vxlan vlan 100 vni 1000 ! VLAN 100 ↔ VNI 1000

router bgp 65000
vlan 100
rd 10.0.0.1:1 ! RD riêng của Leaf này
route-target both 65000:1
redistribute learned ! quảng bá MAC học được (Type-2) qua BGP

Huawei VRP:

evpn-overlay enable

interface LoopBack0
ip address 10.0.0.1 255.255.255.255

interface LoopBack1 # VTEP source riêng biệt
ip address 10.0.0.11 255.255.255.255

bridge-domain 100
vxlan vni 1000 # BD 100 ↔ VNI 1000 (BD là broadcast domain riêng, không đồng nhất với VLAN 802.1Q)
evpn
route-distinguisher 10.0.0.1:1 # RD riêng của Leaf này
vpn-target 65000:1

interface vbdif100
ip address 10.1.1.1 255.255.255.0
mac-address 0000-5e00-0101 # Anycast MAC — giống trên tất cả Leaf!
vxlan anycast-gateway enable
arp collect host enable # thu thập ARP host-route để phục vụ ARP suppression

interface nve1
source 10.0.0.11 # loopback làm source IP của VXLAN tunnel
vni 1000 head-end peer-list protocol bgp # không cần multicast underlay

Ba khối vtep-source-interface, route-distinguisher, vrf-target trong switch-options (Junos), hay source-interface/rd/route-target trên Cisco và Arista, source/route-distinguisher/vpn-target trên Huawei, chính là ba mảnh ghép đã học riêng lẻ ở các phần trước: Loopback làm VTEP (Phần 1), RD để tránh trùng route (mục này), RT để phân loại đúng VRF (mục này). ingress-node-replication/ingress-replication protocol bgp/head-end peer-list protocol bgp là cách mỗi vendor xây danh sách BUM-replication mà không cần multicast underlay, chính là cơ chế Type 3 đã học ở Phần 3. Riêng Arista không cần lệnh suppress-arp tường minh: khi redistribute learned đã bật, EOS tự học và quảng bá host-route (MAC+IP) làm nền cho proxy-ARP.

Bổ sung: Cấu hình L3 VNI cho inter-VNI routing (Symmetric IRB)​

Junos (set style):

set routing-instances VRF-PROD instance-type vrf
set routing-instances VRF-PROD interface irb.1000 # gateway cho VNI 1000
set routing-instances VRF-PROD interface irb.2000 # gateway cho VNI 2000
set routing-instances VRF-PROD route-distinguisher 10.0.0.1:50000
set routing-instances VRF-PROD vrf-target target:65000:50000
set routing-instances VRF-PROD protocols evpn ip-prefix-routes advertise direct-nexthop
set routing-instances VRF-PROD protocols evpn ip-prefix-routes encapsulation vxlan
set routing-instances VRF-PROD protocols evpn ip-prefix-routes vni 50000 # L3 VNI riêng của VRF này

Cisco NX-OS:

vrf context VRF-PROD
vni 50000 ! L3 VNI riêng của VRF này
rd 10.0.0.1:50000
address-family ipv4 unicast
route-target both 65000:50000
route-target both 65000:50000 evpn

interface Vlan100
vrf member VRF-PROD ! gateway cho VNI 1000
interface Vlan200
vrf member VRF-PROD ! gateway cho VNI 2000

router bgp 65000
vrf VRF-PROD
address-family ipv4 unicast
advertise l2vpn evpn ! sinh Type-5 từ route trong VRF

Arista EOS:

vrf instance VRF-PROD

interface Vlan100
vrf VRF-PROD ! gateway cho VNI 1000
interface Vlan200
vrf VRF-PROD ! gateway cho VNI 2000

interface Vxlan1
vxlan vrf VRF-PROD vni 50000 ! L3 VNI riêng của VRF này

router bgp 65000
vrf VRF-PROD
rd 10.0.0.1:50000
route-target import 65000:50000
route-target export 65000:50000
redistribute connected ! sinh Type-5 từ route trong VRF

Huawei VRP:

ip vpn-instance VRF-PROD
vxlan vni 50000 # L3 VNI riêng của VRF này
ipv4-family
route-distinguisher 10.0.0.1:50000
vpn-target 65000:50000 evpn

interface vbdif100
ip binding vpn-instance VRF-PROD # gateway cho VNI 1000
interface vbdif200
ip binding vpn-instance VRF-PROD # gateway cho VNI 2000

ip-prefix-routes { advertise direct-nexthop; ... } (Junos), hay advertise l2vpn evpn (Cisco), redistribute connected trong context VRF (Arista), việc gán vxlan vni cho ip vpn-instance (Huawei): tất cả đều là cấu hình sinh ra Type 5 route với GW IP = 0.0.0.0 như đã giải thích ở Phần 4, Mục 1. Cú pháp Junos này đã có từ Junos 15.1X53-D60 và vẫn là cách làm hiện đại được khuyến nghị.

Bổ sung: Cấu hình Type-5 Import/Export​

Type 5 có hai phía, export (bên quảng bá prefix) và import (bên nhận prefix), và cả hai phải khớp RT thì route mới đi đúng chỗ, đúng nguyên tắc RT đã học ở Bước 3.

Phía Export, quảng bá Type-5 ra ngoài (Junos, set style):

set routing-instances VRF-A instance-type vrf
set routing-instances VRF-A interface irb.1000
set routing-instances VRF-A route-distinguisher 10.0.0.1:100
set routing-instances VRF-A vrf-target target:65000:100 # export với RT này
set routing-instances VRF-A protocols evpn ip-prefix-routes advertise direct-nexthop
set routing-instances VRF-A protocols evpn ip-prefix-routes encapsulation vxlan
set routing-instances VRF-A protocols evpn ip-prefix-routes vni 50100 # L3 VNI của VRF-A

# Kết quả: prefix 10.1.1.0/24 (direct route trong VRF-A)
# → được quảng bá ra EVPN dưới dạng Type-5:
# {prefix=10.1.1.0/24, L3 VNI=50100, RT=target:65000:100, GW IP=0.0.0.0}

Phía Import, nhận Type-5 vào VRF (Junos, set style, tách import/export riêng):

set routing-instances VRF-B instance-type vrf
set routing-instances VRF-B interface irb.2000
set routing-instances VRF-B route-distinguisher 10.0.0.1:200
set routing-instances VRF-B vrf-import VRF_B_IMPORT
set routing-instances VRF-B vrf-export VRF_B_EXPORT

set policy-options community RT-A members target:65000:100 # RT của VRF-A
set policy-options community RT-B members target:65000:200 # RT của VRF-B

set policy-options policy-statement VRF_B_IMPORT term accept-from-vrf-a from community RT-A
set policy-options policy-statement VRF_B_IMPORT term accept-from-vrf-a then accept
set policy-options policy-statement VRF_B_IMPORT term reject-rest then reject

set policy-options policy-statement VRF_B_EXPORT term export-vrf-b then community add RT-B
set policy-options policy-statement VRF_B_EXPORT term export-vrf-b then accept

# Kết quả: VRF-B nhận Type-5 từ VRF-A
# → route 10.1.1.0/24 xuất hiện trong VRF-B.inet.0
# → next-hop = VTEP của VRF-A (10.0.0.X), L3 VNI = 50100

Đặt hai cách khai RT cạnh nhau để biết khi nào chọn cái nào:

vrf-target target:X:Yvrf-import + vrf-export
Phạm vi tác dụngSet cả hướng import và hướng export cùng một RTTách rời hai hướng, mỗi hướng một policy riêng
Số RT xử lý đượcĐúng mộtImport nhiều RT cùng lúc, export gán nhiều RT hoặc kèm điều kiện lọc prefix
Dùng khiImport RT bằng đúng export RT, cấu hình ngắn gọnDCI, multi-tenant, hub-and-spoke

Khai cả hai cùng lúc trên một instance cũng hợp lệ, và thứ tự ưu tiên cần nhớ: vrf-import override hướng import của vrf-target, nên khi đó vrf-target chỉ còn tác dụng ở hướng export.

Cùng kịch bản VRF-B nhận Type-5 từ VRF-A trên 3 vendor còn lại. Điểm cần nhìn ở cả ba khối dưới đây là một: import RT của VRF-B phải khớp export RT của VRF-A, đúng logic Junos vừa trình bày ở trên.

Cisco NX-OS:

vrf context VRF-B
vni 50200
rd 10.0.0.1:200
address-family ipv4 unicast
route-target import 65000:100 evpn ! nhận từ VRF-A
route-target export 65000:200 evpn

Arista EOS:

router bgp 65000
vrf VRF-B
rd 10.0.0.1:200
route-target import 65000:100 ! nhận từ VRF-A
route-target export 65000:200

Huawei VRP:

ip vpn-instance VRF-B
vxlan vni 50200
ipv4-family
route-distinguisher 10.0.0.1:200
vpn-target 65000:100 import-extcommunity evpn # nhận từ VRF-A
vpn-target 65000:200 export-extcommunity evpn

Với kịch bản DCI 2 site (mỗi site RT riêng, mỗi site phải import cả RT của site kia lẫn RT của chính mình để route không bị "rớt" khi đi ngược lại): cơ chế trên cả 4 vendor giống hệt nhau: thêm nhiều dòng vrf-import/route-target import/vpn-target … import-extcommunity, mỗi dòng một RT cần chấp nhận. Bản Junos đầy đủ của kịch bản DCI:

DCI: Site A và Site B trao đổi Type-5 (Junos, set style):

set routing-instances VRF-PROD instance-type vrf
set routing-instances VRF-PROD route-distinguisher 10.0.0.1:1000
set routing-instances VRF-PROD vrf-import VRF_PROD_IMPORT
set routing-instances VRF-PROD vrf-export VRF_PROD_EXPORT
set routing-instances VRF-PROD protocols evpn ip-prefix-routes advertise direct-nexthop
set routing-instances VRF-PROD protocols evpn ip-prefix-routes encapsulation vxlan
set routing-instances VRF-PROD protocols evpn ip-prefix-routes vni 51000

set policy-options community RT-SITE-A members target:65001:1000
set policy-options community RT-SITE-B members target:65002:1000

set policy-options policy-statement VRF_PROD_IMPORT term from-site-b from community RT-SITE-B
set policy-options policy-statement VRF_PROD_IMPORT term from-site-b then accept
set policy-options policy-statement VRF_PROD_IMPORT term from-self from community RT-SITE-A
set policy-options policy-statement VRF_PROD_IMPORT term from-self then accept
set policy-options policy-statement VRF_PROD_IMPORT term reject then reject

set policy-options policy-statement VRF_PROD_EXPORT term export then community add RT-SITE-A
set policy-options policy-statement VRF_PROD_EXPORT term export then accept

# Site B — config tương tự, đổi RT-SITE-A ↔ RT-SITE-B

Mô hình multi-site với nhiều RT theo từng site trong thực tế production, cả trên Junos lẫn 3 vendor kia, sẽ được nói kỹ hơn ở các phần sau.

Verify Type-5 import/export (Junos):

# Xem Type-5 route đang được quảng bá (export)
show route table bgp.evpn.0 match-prefix "5:" detail

# Output mẫu:
# 5:10.0.0.1:1000::0::10.1.1.0::24/248
# *[EVPN/170] ...
# Route Distinguisher: 10.0.0.1:1000
# IP prefix: 10.1.1.0, IP prefix length: 24
# Gateway IP: 0.0.0.0
# Label1: 50100 ← L3 VNI
# Communities: target:65000:100

# Xem Type-5 đã vào VRF routing table chưa
show route table VRF-B.inet.0

# Nếu thiếu route → kiểm tra RT có khớp không
show route table bgp.evpn.0 match-prefix "5:" extensive | match "target"

Lệnh tương đương trên Cisco/Arista/Huawei cho các bước verify này nằm trong bảng ở Mục 2.

Kiểm tra nhanh sau khi cấu hình​

# 1. BGP session với Route Reflector?
show bgp summary

# 2. EVPN route đến được chưa?
show evpn database

# 3. Type-2 route (MAC/IP) học được chưa?
show route table bgp.evpn.0 detail | match "MAC"

# 4. ARP suppression table đã có entry?
show evpn arp-table

# 5. VXLAN tunnel lên chưa?
show ethernet-switching vxlan-tunnel-end-point remote

Đây là checklist Junos. Lệnh tương đương cho từng bước trên Cisco NX-OS, Arista EOS, Huawei VRP nằm ngay trong bảng ở Mục 2 dưới đây.


2. Lệnh kiểm tra thực tế​

Kiểm tra EVPN database (bảng MAC/IP của local VTEP)​

show evpn database

# Output mẫu:
# Instance: default
# VLAN DomainId MAC address Active source Timestamp IP address
# 100 1000 aa:bb:cc:dd:ee:ff ge-0/0/0.0 (local) 01:23:45 ago 10.1.1.10
# 100 1000 dd:ee:ff:aa:bb:cc 10.0.0.2 (remote VTEP) 00:05:12 ago 10.1.1.20
# ↑ MAC này ở VTEP 10.0.0.2

Kiểm tra EVPN BGP routes​

# Xem tất cả EVPN route nhận được
show route table bgp.evpn.0

# Xem Type-2 routes (MAC/IP)
show route table bgp.evpn.0 match-prefix "2:"

# Xem Type-3 routes (BUM list)
show route table bgp.evpn.0 match-prefix "3:"

# Xem Type-5 routes (IP prefix)
show route table bgp.evpn.0 match-prefix "5:"

Kiểm tra ARP Suppression​

# ARP table học từ EVPN (để proxy ARP)
show evpn arp-table

# Output:
# IP MAC VTEP VNI Source
# 10.1.1.10 aa:bb:cc:... 10.0.0.1 1000 EVPN
# 10.1.1.20 dd:ee:ff:... local 1000 ARP

Kiểm tra VTEP và ingress-replication list​

show evpn instance extensive

# Output:
# Instance: default
# Route Distinguisher: 10.0.0.1:1
# Per-VNI statistics:
# VNI 1000:
# Ingress replication peers: 10.0.0.2, 10.0.0.3
# ↑ BUM sẽ gửi đến những VTEP này — chính là danh sách Type-3 đã học

Kiểm tra Multi-Homing (ESI)​

show evpn instance esi-detail

# Output:
# ESI: 0x00:11:22:33:44:55:66:77:88:99
# Status: Resolved
# DF Election: Leaf-01 is DF (bầu chọn DF)
# Peers: 10.0.0.1 (local), 10.0.0.2 (remote)

show route table bgp.evpn.0 match-prefix "1:"

Lệnh tương đương trên Cisco NX-OS / Arista EOS / Huawei VRP​

Toàn bộ lệnh show/display dưới đây đã đối chiếu với tài liệu chính thức từng vendor, xem Nguồn tham khảo.

Mục đíchJunosCisco NX-OSArista EOSHuawei VRP
BGP overlay sessionshow bgp summaryshow bgp l2vpn evpn summaryshow bgp evpn summarydisplay bgp evpn peer
Toàn bộ EVPN route trong bảng BGPshow route table bgp.evpn.0show bgp l2vpn evpnshow bgp evpndisplay bgp evpn all routing-table
Type-2 — MAC/IP đã họcshow evpn databaseshow l2route evpn mac-ip allshow bgp evpn route-type mac-ipdisplay bgp evpn vpn-instance <vpn> routing-table mac-route
Type-3 — VTEP/BUM replication listshow evpn instance extensiveshow nve peersshow vxlan vtepdisplay vxlan tunnel
Type-5 — IP prefix routeshow route table bgp.evpn.0 match-prefix "5:"show bgp l2vpn evpn (lọc route-type ip-prefix trong output)show bgp evpn route-type ip-prefixdisplay bgp evpn all routing-table (lọc theo prefix)
ARP suppression tableshow evpn arp-tableshow ip arp suppression-cacheshow arp interface Vxlan1 (EOS không có cache riêng — xem ARP đã snoop)display arp broadcast-suppress user bridge-domain <bd-id>
ESI / multi-homingshow evpn instance esi-detailshow evpn esishow bgp evpn instance (xem local ES: DF, mode)display bgp evpn all esi

Ba dòng đầu (BGP session → EVPN route → Type-2 MAC/IP) chính là 80% những gì cần gõ khi debug một session EVPN mới lên, và thứ tự này khớp với sơ đồ debug ở Mục 3 bên dưới.


3. Xử lý sự cố​

Khi một mạng EVPN "không chạy", cám dỗ đầu tiên thường là nghi ngờ VXLAN hay VLAN, nhưng phần lớn sự cố thực tế nằm ở BGP session hoặc RT không khớp. Dưới đây là 4 tình huống thường gặp nhất, theo đúng thứ tự nên kiểm tra. Logic debug này giống hệt nhau trên mọi vendor — chỉ khác tên lệnh đã liệt kê ở bảng Mục 2, nên phần dưới giữ nguyên theo Junos để tập trung vào tư duy debug thay vì lặp lại cú pháp 4 lần.

Debugging EVPN: Check In This Order1. Underlay OK? (ping Lo0)2. BGP EVPN Established?3. Any route in bgp.evpn.0?4. RT export == import?5. Any ARP suppression entry?6. Real traffic (monitor)✗ fix the underlay first✗ → sai ASN/local-address✗ remote is not advertising✗ the most common failure

Vấn đề 1: BGP EVPN session không lên​

Triệu chứng: show bgp summary báo neighbor ở trạng thái Active thay vì Established.

Bốn thứ cần kiểm tra, theo đúng thứ tự dưới đây:

Bước 1: underlay có ping được không. Nếu bước này đã fail thì không cần xem tiếp phần overlay: phải fix underlay (OSPF hoặc BGP underlay) trước.

ping 10.100.0.1 routing-instance default source 10.0.0.1

Bước 2: ASN có đúng không. Leaf phải peer đúng ASN mà Spine đang dùng.

show bgp summary | match AS

Bước 3: local-address có phải loopback không. Phải dùng loopback, không dùng IP của interface vật lý:

set protocols bgp group OVERLAY local-address 10.0.0.1

Bước 4: address-family EVPN đã bật chưa. Trong danh sách capabilities đã đàm phán phải thấy EVPN; nếu không thấy, hai đầu chưa thống nhất được address-family nên session không thể lên.

show bgp neighbor 10.100.0.1 detail | match EVPN

Vấn đề 2: Không thấy MAC của VM ở Leaf khác​

Triệu chứng: show evpn database chỉ liệt kê MAC cục bộ, không có MAC nào từ VTEP ở xa.

Bước 1: BGP session lên chưa. Mọi neighbor phải ở trạng thái Established.

show bgp summary

Bước 2: Route Reflector có nhận được route từ Leaf-A không. Gõ trên Spine; không thấy route nào mang RD của Leaf-A nghĩa là Leaf-A chưa hề gửi route đi.

show route table bgp.evpn.0 | match "10.0.0.1"

Bước 3: Route Target có khớp nhau không. Đây là nguyên nhân hay gặp nhất của toàn bộ bốn tình huống trong mục này, và cũng là thứ Bước 3 ở Mục 1 đã nhấn: export RT của Leaf-01 phải trùng khít import RT của Leaf-02, chẳng hạn cả hai đều target:65000:1000.

show evpn instance extensive | match "Route Target"

Bước 4: VM đã gửi traffic chưa. EVPN chỉ sinh Type 2 route sau khi leaf nhìn thấy traffic từ VM (nhớ lại GARP ở Phần 3, Mục 4), nên một VM vừa boot mà im lặng sẽ không xuất hiện ở đâu cả. Cho VM ping gateway rồi kiểm tra lại:

# từ VM
ping 10.1.1.1

# trên leaf
show evpn database

Vấn đề 3: ARP Suppression không hoạt động​

Triệu chứng: vẫn thấy ARP bị flood trên fabric dù EVPN đã chạy.

Bước 1: bảng ARP học từ EVPN có entry nào chưa. Bảng rỗng nghĩa là chưa có gì để proxy-reply, nên leaf buộc phải flood.

show evpn arp-table

Bước 2: Type 2 route đã mang IP chưa. Route Type 2 phải có cả MAC lẫn IP; nếu chỉ có MAC thì VM chưa từng gửi ARP nên chưa có ánh xạ IP để leaf trả lời thay (xem lại Phần 3, Mục 5).

show route table bgp.evpn.0 | match "MAC"

Bước 3: ingress-node-replication đã bật chưa. Output phải có dòng Ingress node replication: Enabled.

show vlans vlan-100 detail | match "ingress"

Vấn đề 4: Inter-VNI routing không hoạt động​

Triệu chứng: VM-A (VNI 1000) không ping được VM-X (VNI 2000), nhưng ping trong cùng một VNI thì vẫn tốt. Triệu chứng tách bạch như vậy đã khoanh vùng sẵn: lớp bridging ổn, vấn đề nằm ở lớp routing.

Bước 1: IRB interface có up không. Cả hai IRB phải ở State: up.

show interfaces irb.1000
show interfaces irb.2000

Bước 2: VM-A có ping được gateway của chính nó không. Nếu bước này fail thì đây là lỗi layer 2 cục bộ, chưa liên quan gì tới routing.

# từ VM-A
ping 10.1.1.1

Bước 3: route tới subnet của VNI 2000 đã có chưa. Phải thấy route, và nguồn học phải là EVPN Type 5.

show route 10.2.2.0/24

Bước 4: L3 VNI đã cấu hình và có khớp nhau chưa. Giá trị L3 VNI phải giống nhau giữa Leaf-01 và Leaf-02, đúng tính chất đối xứng của Symmetric IRB (xem lại Phần 2, Mục 3 và Phần 4, Mục 2).

Bước 5: Anycast MAC có giống nhau trên mọi Leaf không. Mọi Leaf phải mang cùng một MAC trên IRB interface, nếu lệch thì host sẽ thấy gateway "nhảy" MAC khi đi qua leaf khác.

show interfaces irb.1000 detail | match MAC

4. Bảng tham chiếu nhanh​

EVPN Route Types​

TypeTênMục đíchKhi nào tạo
1Ethernet Auto-DiscoveryESI multi-homingKhi cấu hình ESI
2MAC/IP AdvertisementVị trí host (MAC+IP)Khi VM giao tiếp
3Inclusive MulticastBUM replication listKhi VNI bật
4Ethernet SegmentDF election (ESI)Khi cấu hình ESI
5IP PrefixRouting giữa VNIKhi cấu hình L3

EVPN vs Flood-and-Learn​

Tính năngFlood-and-LearnEVPN Control Plane
ARP behaviorFlood toàn fabricProxy ARP tại local Leaf
MAC learningTừ data plane (chậm)Từ BGP UPDATE (ngay lập tức)
VM mobilityChờ MAC aging (phút)BGP UPDATE ngay (giây)
BUM trafficNhiều, không kiểm soátÍt, ingress-replication list
Multi-homingMAC flappingESI-based, không flap

VNI Naming Convention (gợi ý)​

L2 VNI (per VLAN/segment): VNI 10xxx = VLAN xxx
L3 VNI (per VRF): VNI 50xxx = VRF xxx

Bức tranh tổng thể​

VXLAN + EVPN — The Full PictureControl Plane — EVPN (MP-BGP)Leaf1: MAC=AA in VNI 1000, IP=10.1.1.10, learned by Leaf2 via a BGP UPDATELeaf2 now knows AA sits at VTEP 10.0.0.1, so it can proxy-ARP and route directlyData Plane — VXLAN (UDP 4789)Leaf1 ══ tunnel VNI=1000 ══ Leaf2: real traffic rides here at line rateEncap and decap on the ASIC, using what the control plane just learnedUnderlay: a plain IP network (OSPF/BGP)Spine and leaf exchange loopbacks: the base that lets the layers above find each otherVM-A10.1.1.10VM-B10.1.1.20Three layers cooperate so one simple ping takes the right path

Ba tầng trong hình trên (underlay, VXLAN data plane, EVPN control plane) chính là ba lớp cấu hình đã đi qua ở Mục 1, dù triển khai bằng Junos, NX-OS, EOS hay VRP. Nếu quay lại đọc Phần 1 sau khi đã xem qua cấu hình thật ở đây, các khái niệm sẽ rõ ràng hơn nhiều so với lần đọc đầu tiên — đây là điều bình thường khi học một hệ thống nhiều lớp như EVPN.


Nguồn tham khảo​

RFC nền tảng: RFC 7432 (EVPN), RFC 8365 (EVPN for VXLAN), RFC 9135 (IRB), RFC 9136 (IP Prefix Route).

Cú pháp CLI từng vendor trong bài đã đối chiếu với các tài liệu chính thức sau (truy cập 2026-07-15):

Lưu ý về độ chính xác: cú pháp show/display verify ở Mục 2 cho Cisco/Arista/Huawei đã đối chiếu với tài liệu chính thức ở trên; riêng cách lọc Type-5 (IP prefix route) trên Cisco NX-OS và Arista EOS không có flag lọc riêng biệt như Junos match-prefix "5:", nên cần lọc thủ công trong output chung, đã ghi chú trực tiếp trong bảng.


Kết thúc phần cơ bản (Phần 1-5). Phần 6 và 6 chuyển sang bối cảnh production thực tế: kiến trúc routing table nội bộ, cùng các pattern multi-site và multi-tenant thường gặp khi vận hành EVPN ở quy mô lớn. Vì các khái niệm ở mức đó được từng vendor hiện thực rất khác nhau, hai phần cuối trình bày theo Junos thay vì song song bốn vendor như phần này.

Tiếp theo: Phần 6: Kiến Trúc Routing Table Nội Bộ.